"""
@name : 09.python中的下划线
@author : wenyao
@projectname: xsfh
"""
class P:
    """
    this is p
    :return
    """
    _min = 1   #保护属性
    __max = 10 #私有属性

    def __init__(self):
        self.name = "sc"
        self._age = 4
        self.__desc = "it"

    def __make(self):
        print("这是一个私有方法")
        print(self.__desc)

    def _protectmake(self):
        print("这是一个保护方法")

    def show(self):
        print(self.__max, self.__desc)

class Child(P):
    def show(self):
        print(self.__max)
        # print(self._P__max)

p = P()
c1 = Child()
#访问保护属性
# print(p._min, c1._min)
# p._protectmake()
# c1._protectmake()

#私有属性：
#只能类内部自己访问，子类都不能访问

#访问私有属性
# print(p.__max, p.__desc)
# p.show()
# c1.show()

#python中的私有是一种伪私有
#查看属性p的命名空间
# print(p.__dict__)
# print("*"*20)
# print(id(p))
# print(id(p)/16)
# print(hash(p))
# print(p.__hash__())
# print(P.__dict__)
# print("*"*30)
#查看父类
# print(P.__base__)
#self.__desc  --> self._P__desc
# print(p._P__desc)

#在类的内部看到双下划线开头的方法或者属性
#会在对变量名做一层转换 -- 》 __max -->_类名__max

#以双下划线开头和以双下划线结尾的属性或方法在python中是有特殊含义的
# __dict__ 查看命名空间
# __name__ 类名
# print(P.__name__)
# #__class__ 查看对象属于哪个类
# print(p.__class__)
# #__module__ 查看所在模块
# print(P.__module__)
# #__doc__ 文档注释
# print(P.__doc__)
# print(help(P))

#__next__
#next(a)